home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 52 / Amiga Format AFCD52 (Issue 136, May 2000).iso / -screenplay- / hd_installers / -whdload- / whdload_dev / patcher1.05dev.lha / Patcher1.05 / MAKECOMPARATIONTABLE3.ASM next >
Assembly Source File  |  1998-01-12  |  13KB  |  649 lines

  1.  
  2. ;This program compares two files with the same length and makes a table
  3. ;of the differences between them. 
  4. ;Done by Egon.
  5.  
  6.  
  7.     INCDIR    ASM-ONE:INCLUDE2.0/
  8.  
  9.     INCLUDE LIBRARIES/DOS_LIB.I
  10.     INCLUDE    LIBRARIES/DOS.I
  11.     INCLUDE    LIBRARIES/DISKFONT_LIB.I
  12.     INCLUDE EXEC/EXEC_LIB.I
  13.     INCLUDE    EXEC/MEMORY.I
  14.     INCLUDE    GRAPHICS/GRAPHICS_LIB.I
  15.     INCLUDE INTUITION/INTUITION_LIB.I
  16.     INCLUDE INTUITION/INTUITION.I
  17.  
  18.     INCDIR    ASM-ONE:
  19.  
  20.  
  21. SIZETABLE = $2000        ;MAXIMALLY SIZE OF COMPARATIONTABLE (Longwords)
  22.  
  23.     BRA.S    HP
  24.     DC.B    0,'$VER: MakeCompTab 1.01 (12-jan-98 9:00:00)',0
  25.     EVEN
  26.  
  27. HP    ;BRA.S    HP
  28.     BASEREG    DOSBAS,A5
  29.     LEA.L    DOSBAS(PC),A5
  30.     MOVE.L    A0,DATABASE(A5)
  31.     MOVE.L    D0,DATALENGTH(A5)
  32.     MOVE.L    A7,OSSTACK(A5)
  33.     SUBQ.L    #1,A0
  34. .1    ADDQ.L    #1,A0
  35.     CMP.B    #$9,(A0)
  36.     BEQ.S    .1
  37.     CMP.B    #$20,(A0)
  38.     BEQ.S    .1
  39.     CMP.B    #$A,(A0)
  40.     BNE.S    .10
  41.     MOVEQ.L    #20,D0
  42.     RTS
  43.  
  44. .10    CMP.B    #'?',(A0)
  45.     BNE.S    .2
  46.     MOVE.L    (_SYSBASE).W,A6
  47.     LEA.L    DOSNAM(PC),A1
  48.     MOVEQ.L    #0,D0
  49.     JSR    _LVOOpenLibrary(A6)    ;DOS öffnen
  50.     TST.L    D0
  51.     BEQ.W    ERRGENERAL
  52.     MOVE.L    D0,DOSBAS(A5)        ;Zeiger sichern
  53.  
  54.     MOVE.L    DOSBAS(PC),A6
  55.     JSR    _LVOOUTPUT(A6)
  56.     TST.L    D0
  57.     BEQ.W    ERRGENERAL
  58.     MOVE.L    D0,OUTPUTBAS(A5)
  59.  
  60.     LEA.L    HELPSYNTAX(PC),A0
  61.     MOVEQ.L    #0,D3
  62.     MOVE.L    A0,D2
  63. .9    TST.B    (A0)+
  64.     BEQ.S    .8
  65.     ADDQ.L    #1,D3
  66.     BRA.S    .9
  67.  
  68. .8    MOVE.L    OUTPUTBAS(PC),D1
  69.     MOVE.L    DOSBAS(PC),A6
  70.     JSR    _LVOWRITE(A6)
  71.     LEA.L    $0.W,A0
  72.     BRA.W    ENDE
  73.  
  74. .2    LEA.L    LOCK1NAM(PC),A1
  75.     BSR.W    EXAMPARAM
  76.     TST.L    D3
  77.     BNE.S    .3
  78.     MOVEQ.L    #20,D0
  79.     RTS
  80.  
  81. .3    LEA.L    LOCK2NAM(PC),A1
  82.     BSR.W    EXAMPARAM
  83.     TST.L    D3
  84.     BNE.S    .4
  85.     MOVEQ.L    #20,D0
  86.     RTS
  87.  
  88. .4    TST.L    D0
  89.     BNE.S    .6
  90. .5    LEA.L    LOCK3NAM(PC),A1
  91.     BSR.W    EXAMPARAM
  92.     TST.L    D3
  93.     BNE.S    .7
  94. .6    ST    NOTSAVE(A5)
  95. .7
  96.  
  97. MAINPRG    MOVE.L    (_SYSBASE).W,A6
  98.     LEA.L    DOSNAM(PC),A1
  99.     MOVEQ.L    #0,D0
  100.     JSR    _LVOOpenLibrary(A6)    ;DOS öffnen
  101.     TST.L    D0
  102.     BEQ.W    ERRGENERAL
  103.     MOVE.L    D0,DOSBAS(A5)        ;Zeiger sichern
  104.  
  105.     MOVE.L    DOSBAS(PC),A6
  106.     JSR    _LVOOUTPUT(A6)
  107.     TST.L    D0
  108.     BEQ.W    ERRGENERAL
  109.     MOVE.L    D0,OUTPUTBAS(A5)
  110.  
  111.     LEA.L    WRITTEN(PC),A0
  112.     MOVEQ.L    #0,D3
  113.     MOVE.L    A0,D2
  114. .3    TST.B    (A0)+
  115.     BEQ.S    .2
  116.     ADDQ.L    #1,D3
  117.     BRA.S    .3
  118.  
  119. .2    MOVE.L    OUTPUTBAS(PC),D1
  120.     MOVE.L    DOSBAS(PC),A6
  121.     JSR    _LVOWRITE(A6)
  122.  
  123.     LEA.L    LOCK1NAM(PC),A1
  124.     MOVE.L    A1,D1
  125.     MOVE.L    #MODE_READWRITE,D2
  126.     MOVE.L    DOSBAS(PC),A6
  127.     JSR    _LVOLOCK(A6)
  128.     TST.L    D0
  129.     BEQ.W    ERRNOTEXIST
  130.     MOVE.L    D0,PARAM1LOCK(A5)
  131.     MOVE.L    PARAM1LOCK(PC),D1
  132.     MOVE.L    #PARAM1INFO,D2
  133.     MOVE.L    DOSBAS(PC),A6
  134.     JSR    _LVOEXAMINE(A6)
  135.     TST.L    D0
  136.     BEQ.W    ERRNOTEXIST
  137.     LEA.L    PARAM1INFO,A0
  138.     CMP.L    #-3,FIB_DIRENTRYTYPE(A0)
  139.     BNE.W    ERRNOFILE
  140.  
  141.     LEA.L    LOCK2NAM(PC),A1
  142.     MOVE.L    A1,D1
  143.     MOVE.L    #MODE_READWRITE,D2
  144.     MOVE.L    DOSBAS(PC),A6
  145.     JSR    _LVOLOCK(A6)
  146.     TST.L    D0
  147.     BEQ.W    ERRNOTEXIST
  148.     MOVE.L    D0,PARAM2LOCK(A5)
  149.     MOVE.L    PARAM2LOCK(PC),D1
  150.     MOVE.L    #PARAM2INFO,D2
  151.     MOVE.L    DOSBAS(PC),A6
  152.     JSR    _LVOEXAMINE(A6)
  153.     TST.L    D0
  154.     BEQ.W    ERRNOTEXIST
  155.     LEA.L    PARAM2INFO,A0
  156.     CMP.L    #-3,FIB_DIRENTRYTYPE(A0)
  157.     BNE.W    ERRNOFILE
  158.  
  159.     LEA.L    PARAM1INFO,A0
  160.     MOVE.L    FIB_SIZE(A0),D0
  161.     LEA.L    PARAM2INFO,A0
  162.     CMP.L    FIB_SIZE(A0),D0
  163.     BNE.W    ERROTHERLEN
  164.     CMP.L    #$1FFFF8,D0
  165.     BHI.W    ERRFILETOOLONG
  166.  
  167.     MOVE.L    D0,LENGTH(A5)
  168.     ADD.L    #$7,D0
  169.     AND.L    #$1FFFF8,D0
  170.     MOVE.L    D0,A2
  171.     MOVE.L    #MEMF_CLEAR,D1
  172.     MOVE.L    (_SYSBASE).W,A6
  173.     JSR    _LVOALLOCMEM(A6)
  174.     TST.L    D0
  175.     BEQ.W    ERRNOTENMEM
  176.     MOVE.L    D0,MEM1BASE(A5)
  177.     MOVE.L    A2,D0
  178.     MOVE.L    #MEMF_CLEAR,D1
  179.     MOVE.L    (_SYSBASE).W,A6
  180.     JSR    _LVOALLOCMEM(A6)
  181.     TST.L    D0
  182.     BEQ.W    ERRNOTENMEM
  183.     MOVE.L    D0,MEM2BASE(A5)
  184.  
  185.     LEA.L    LOCK1NAM(PC),A1
  186.     MOVE.L    A1,D1
  187.     MOVE.L    #MODE_OLDFILE,D2
  188.     MOVE.L    DOSBAS(PC),A6
  189.     JSR    _LVOOPEN(A6)
  190.     TST.L    D0
  191.     BEQ.W    ERROPENFILE
  192.     MOVE.L    D0,FILHANDLE(A5)
  193.     MOVE.L    FILHANDLE(PC),D1
  194.     MOVE.L    MEM1BASE(PC),D2
  195.     LEA.L    PARAM1INFO,A0
  196.     MOVE.L    FIB_SIZE(A0),D3
  197.     MOVE.L    DOSBAS(PC),A6
  198.     JSR    _LVOREAD(A6)
  199.     TST.L    D0
  200.     BMI.W    ERRLOADFILE
  201.     BEQ.W    ERRLOADFILE
  202.     MOVE.L    FILHANDLE(PC),D1
  203.     MOVE.L    DOSBAS(PC),A6
  204.     JSR    _LVOCLOSE(A6)
  205.     CLR.L    FILHANDLE(A5)
  206.  
  207.     LEA.L    LOCK2NAM(PC),A1
  208.     MOVE.L    A1,D1
  209.     MOVE.L    #MODE_OLDFILE,D2
  210.     MOVE.L    DOSBAS(PC),A6
  211.     JSR    _LVOOPEN(A6)
  212.     TST.L    D0
  213.     BEQ.W    ERROPENFILE
  214.     MOVE.L    D0,FILHANDLE(A5)
  215.     MOVE.L    FILHANDLE(PC),D1
  216.     MOVE.L    MEM2BASE(PC),D2
  217.     LEA.L    PARAM2INFO,A0
  218.     MOVE.L    FIB_SIZE(A0),D3
  219.     MOVE.L    DOSBAS(PC),A6
  220.     JSR    _LVOREAD(A6)
  221.     TST.L    D0
  222.     BMI.W    ERRLOADFILE
  223.     BEQ.W    ERRLOADFILE
  224.     MOVE.L    FILHANDLE(PC),D1
  225.     MOVE.L    DOSBAS(PC),A6
  226.     JSR    _LVOCLOSE(A6)
  227.     CLR.L    FILHANDLE(A5)
  228.  
  229.     MOVE.L    PARAM1LOCK(PC),D1
  230.     MOVE.L    DOSBAS(PC),A6
  231.     JSR    _LVOUNLOCK(A6)
  232.     CLR.L    PARAM1LOCK(A5)
  233.     MOVE.L    PARAM2LOCK(PC),D1
  234.     MOVE.L    DOSBAS(PC),A6
  235.     JSR    _LVOUNLOCK(A6)
  236.     CLR.L    PARAM2LOCK(A5)
  237.  
  238.     MOVE.L    MEM1BASE(PC),A0        ;FILE1 ORIGINAL
  239.     MOVE.L    MEM2BASE(PC),A1
  240.     BSR.W    COMP
  241.     CMP.L    #-1,D0
  242.     BEQ.W    ERRTABTOOLONG
  243.     CMP.L    #4,D0
  244.     BEQ.W    NODIFF
  245.     MOVE.L    D0,D4
  246.  
  247.     TST.B    NOTSAVE(A5)
  248.     BNE.S    .1
  249.     LEA.L    LOCK3NAM(PC),A1
  250.     MOVE.L    A1,D1
  251.     MOVE.L    #MODE_NEWFILE,D2
  252.     MOVE.L    DOSBAS(PC),A6
  253.     JSR    _LVOOPEN(A6)
  254.     TST.L    D0
  255.     BEQ.W    ERRSAVEFILE
  256.     MOVE.L    D0,FILHANDLE(A5)
  257.     MOVE.L    FILHANDLE(PC),D1
  258.     LEA.L    COMPTAB,A0
  259.     MOVE.L    A0,D2
  260.     MOVE.L    D4,D3
  261.     MOVE.L    DOSBAS(PC),A6
  262.     JSR    _LVOWRITE(A6)
  263.     TST.L    D0
  264.     BMI.W    ERRSAVEFILE
  265.     BEQ.W    ERRSAVEFILE
  266.     MOVE.L    FILHANDLE(PC),D1
  267.     MOVE.L    DOSBAS(PC),A6
  268.     JSR    _LVOCLOSE(A6)
  269. .1    CLR.L    FILHANDLE(A5)
  270.  
  271. ALL_OK    LEA.L    NROK(PC),A0
  272.     MOVE.L    NUMBER(PC),D0
  273.     SWAP    D0
  274.     BSR.S    NEXTNUMBER
  275.     BSR.S    NEXTNUMBER
  276.     BSR.S    NEXTNUMBER
  277.     BSR.S    NEXTNUMBER
  278.     LEA.L    OKDISP(PC),A0
  279.     BRA.S    ENDE
  280.  
  281. NEXTNUMBER    CLR.W    D0
  282.     ROL.L    #4,D0
  283.     MOVE.B    .NR(PC,D0.W),D0
  284.     MOVE.B    D0,(A0)+
  285.     RTS
  286.  
  287. .NR    DC.B    '0123456789ABCDEF'
  288.     EVEN
  289.  
  290. NODIFF    LEA.L    NODIFFDISP(PC),A0
  291. ENDE    MOVEQ.L    #0,D0
  292.     BRA.S    ENDE1
  293.  
  294. ERRGENERAL    LEA.L    $0.W,A0
  295.     BRA.S    ERR
  296.  
  297. ERRSAVEFILE    LEA.L    ERRSAVEDISP(PC),A0
  298.     BRA.S    ERR
  299.  
  300. ERRNOTEXIST    LEA.L    NOTEXISTDISP(PC),A0
  301.     BRA.S    ERR
  302.  
  303. ERRNOFILE    LEA.L    NOFILEDISP(PC),A0
  304.     BRA.S    ERR
  305.  
  306. ERROTHERLEN    LEA.L    OTHERLENDISP(PC),A0
  307.     BRA.S    ERR
  308.  
  309. ERRNOTENMEM    LEA.L    NOTENMEMDISP(PC),A0
  310.     BRA.S    ERR
  311.  
  312. ERROPENFILE    LEA.L    ERROPENDISP(PC),A0
  313.     BRA.S    ERR
  314.  
  315. ERRLOADFILE    LEA.L    ERRLOADDISP(PC),A0
  316.     BRA.S    ERR
  317.  
  318. ERRFILETOOLONG    LEA.L    ERRLONGDISP(PC),A0
  319.     BRA.S    ERR
  320.  
  321. ERRTABTOOLONG    MOVE.L    MEM1BASE(PC),A0
  322.     MOVE.L    MEM2BASE(PC),A1
  323.     MOVEQ.L    #0,D0
  324.     MOVEQ.L    #0,D1
  325. .2    CMPM.B    (A0)+,(A1)+
  326.     BEQ.S    .1
  327.     ADDQ.L    #1,D1
  328. .1    ADDQ.L    #1,D0
  329.     CMP.L    LENGTH(PC),D0
  330.     BLO.S    .2
  331.     MOVE.L    D1,D0
  332.     LEA.L    NRBIG(PC),A0
  333.     BSR.S    NEXTNUMBER
  334.     BSR.S    NEXTNUMBER
  335.     BSR.S    NEXTNUMBER
  336.     BSR.W    NEXTNUMBER
  337.     MOVE.L    D1,D0
  338.     SWAP    D0
  339.     BSR.W    NEXTNUMBER
  340.     BSR.W    NEXTNUMBER
  341.     BSR.W    NEXTNUMBER
  342.     BSR.W    NEXTNUMBER
  343.     LEA.L    NOTSAVEDISP(PC),A0
  344. ERR    MOVE.L    OSSTACK(PC),A7
  345.     MOVEQ.L    #20,D0
  346.  
  347. ENDE1
  348.     MOVE.L    D0,-(A7)
  349.     CMP.L    #0,A0
  350.     BEQ.S    .1
  351.     MOVEQ.L    #0,D3
  352.     MOVE.L    A0,D2
  353. .3    TST.B    (A0)+
  354.     BEQ.S    .2
  355.     ADDQ.L    #1,D3
  356.     BRA.S    .3
  357.  
  358. .2    MOVE.L    OUTPUTBAS(PC),D1
  359.     MOVE.L    DOSBAS(PC),A6
  360.     JSR    _LVOWRITE(A6)
  361.  
  362. .1    TST.L    FILHANDLE(A5)
  363.     BEQ.S    .9
  364.     MOVE.L    FILHANDLE(PC),D1
  365.     MOVE.L    DOSBAS(PC),A6
  366.     JSR    _LVOCLOSE(A6)
  367.  
  368. .9    TST.L    PARAM1LOCK(A5)
  369.     BEQ.S    .5
  370.     MOVE.L    PARAM1LOCK(PC),D1
  371.     MOVE.L    DOSBAS(PC),A6
  372.     JSR    _LVOUNLOCK(A6)
  373.  
  374. .5    TST.L    PARAM2LOCK(A5)
  375.     BEQ.S    .4
  376.     MOVE.L    PARAM2LOCK(PC),D1
  377.     MOVE.L    DOSBAS(PC),A6
  378.     JSR    _LVOUNLOCK(A6)
  379.  
  380. .4    MOVE.L    LENGTH(PC),D0
  381.     ADD.L    #$7,D0
  382.     AND.L    #$FFFF8,D0
  383.     MOVE.L    D0,A2
  384.     TST.L    MEM1BASE(A5)
  385.     BEQ.S    .8
  386.     MOVE.L    MEM1BASE(PC),A1
  387.     MOVE.L    (_SYSBASE).W,A6
  388.     JSR    _LVOFREEMEM(A6)
  389. .8    TST.L    MEM2BASE(A5)
  390.     BEQ.S    .7
  391.     MOVE.L    A2,D0
  392.     MOVE.L    MEM2BASE(PC),A1
  393.     MOVE.L    (_SYSBASE).W,A6
  394.     JSR    _LVOFREEMEM(A6)
  395.  
  396. .7    TST.L    DOSBAS(A5)
  397.     BEQ.S    .6
  398.     MOVE.L    (_SYSBASE).W,A6
  399.     MOVE.L    DOSBAS(PC),A1
  400.     JSR    _LVOCLOSELIBRARY(A6)    ;DOS-Lib schliessen
  401.  
  402. .6    MOVE.L    (A7)+,D0
  403.     RTS
  404.  
  405. ;----------------------------------------------------------------------------
  406. EXAMPARAM    MOVEQ.L    #0,D3
  407.     SUBQ.L    #1,A0
  408. .4    ADDQ.L    #1,A0
  409.     CMP.B    #$9,(A0)
  410.     BEQ.S    .4
  411.     CMP.B    #$20,(A0)
  412.     BEQ.S    .4
  413.     CMP.B    #$A,(A0)
  414.     BEQ.S    .3
  415.     MOVEQ.L    #0,D2
  416.     CMP.B    #'"',(A0)
  417.     BNE.S    .6
  418.     ST    D2
  419.     ADDQ.L    #1,A0
  420. .6
  421. .1    MOVE.B    (A0)+,D1
  422.     CMP.B    #$9,D1
  423.     BEQ.S    .2
  424.     CMP.B    #$20,D1
  425.     BEQ.S    .2
  426.     CMP.B    #$A,D1
  427.     BEQ.S    .3
  428.     CMP.B    #'"',D1
  429.     BEQ.S    .5
  430.     MOVE.B    D1,(A1)+
  431.     ADDQ.L    #1,D3
  432.     BRA.S    .1
  433.  
  434. .2    TST.B    D2
  435.     BEQ.S    .7
  436.     MOVE.B    D1,(A1)+
  437.     ADDQ.L    #1,D3
  438.     BRA.S    .1
  439.  
  440. .5
  441. .7    MOVE.B    #$0,(A1)+
  442.     MOVEQ.L    #0,D0
  443.     RTS
  444.  
  445. .3    MOVE.B    #$0,(A1)+
  446.     MOVEQ.L    #-1,D0
  447.     RTS
  448.  
  449. *******************************************************************************
  450. ;A0: ORGPRG        ;ORIGINAL PROGRAM
  451. ;A1: MODPRG        ;MODIFIED PROGRAM
  452.  
  453. ;THE PROGRAM GIVES BACK THE LENGTH OF THE COMPARATION TABLE IN D0
  454. ;IF THE TABLE DEFINED IS NOT BIG ENOUGH, #$FFFFFFFF IS IN D0
  455. ;THE PROGRAM USES THE REGISTERS D0,D1 AND A0,A1,A2,A3
  456.  
  457.  
  458. COMP    CLR.L    NUMBER
  459.     LEA.L    COMPTAB,A2
  460.     MOVE.W    #SIZETABLE+$40-1,D0
  461. .7    CLR.L    (A2)+
  462.     DBF    D0,.7
  463.  
  464.     LEA.L    COMPTAB,A2
  465.     CLR.B    CMPCOUNT
  466.     MOVEQ.L    #0,D0
  467. .2    CMPM.B    (A0)+,(A1)+
  468.     BEQ.S    .1
  469.     ADD.L    #1,NUMBER
  470.     ADD.B    #1,CMPCOUNT
  471.     CMP.B    #1,CMPCOUNT
  472.     BNE.S    .4
  473.     OR.L    D0,(A2)+
  474.     MOVE.L    A2,A3        ;A3 POINTS AT THE LOCATION WHERE LATER THE
  475.                 ;LENGTH OF THE ACTUAL STRING IS
  476. .4    CMP.B    #2,CMPCOUNT
  477.     BNE.S    .6
  478.     OR.B    #$80,-3(A3)
  479.     MOVE.B    -1(A2),(A2)+
  480. .6    MOVE.B    -1(A1),(A2)+    ;WITH FILES, GET THE BYTE FROM THE MODIFIED ONE
  481.  
  482.     CMP.B    #$FF,CMPCOUNT    ;ONLY 1 BYTE RESERVED FOR COUNTER
  483.     BNE.S    .3
  484.     MOVE.B    CMPCOUNT(PC),(A3)    ;LENGTH OF STRING
  485.     CLR.B    CMPCOUNT    ;CLEAR COUNTER
  486.     MOVE.L    A2,D1        ;LET A2 UNCHANGED ON EVEN VALUE
  487.     AND.L    #$FFFFFFFE,D1    ;SUBTRACT ONE IF A2 IS ODD
  488.     MOVE.L    D1,A2
  489.     BRA.S    .3
  490.  
  491. .1    TST.B    CMPCOUNT
  492.     BEQ.S    .3
  493.     CMP.B    #1,CMPCOUNT
  494.     BEQ.S    .5
  495.     MOVE.B    CMPCOUNT(PC),(A3)    ;LENGTH OF STRING IF STRING IS NEED
  496. .5    MOVE.L    A2,D1        ;LET A2 UNCHANGED ON EVEN VALUE
  497.     AND.L    #$FFFFFFFE,D1    ;SUBTRACT ONE IF A2 IS ODD
  498.     MOVE.L    D1,A2
  499.     CLR.B    CMPCOUNT    ;CLEAR COUNTER
  500. .3    CMP.L    #COMPTABEND-8,A2
  501.     BHI    ERRCOMP
  502.     ADDQ.L    #1,D0
  503.     CMP.L    LENGTH(PC),D0
  504.     BNE.W    .2
  505.     TST.B    CMPCOUNT
  506.     BEQ.S    .8
  507.     CMP.B    #1,CMPCOUNT
  508.     BEQ.S    .9
  509.     MOVE.B    CMPCOUNT(PC),(A3)    ;LENGTH OF STRING IF STRING IS NEED
  510. .9    MOVE.L    A2,D1        ;LET A2 UNCHANGED ON EVEN VALUE
  511.     AND.L    #$FFFFFFFE,D1    ;SUBTRACT ONE IF A2 IS ODD
  512.     MOVE.L    D1,A2
  513.     CLR.B    CMPCOUNT    ;CLEAR COUNTER
  514. .8    OR.L    #$400000,(A2)+
  515.     MOVE.L    A2,D0
  516.     SUB.L    #COMPTAB,D0
  517.     RTS
  518.  
  519. ERRCOMP    MOVE.L    #-$1,D0
  520.     RTS
  521.  
  522. CMPCOUNT    DC.B    0
  523.     EVEN
  524. ;LENGTH    DC.L    $15C04        ;LENGTH OF FILE TO COMPARE
  525. ; DATAFORMAT OF COMPTAB
  526. ; FIRST ENTRY: $00 (UNUSED)
  527. ; NEXT: 3 BYTES ADDRESSOFFSET
  528. ; THIS HAS THE REASON, THAT A LONGWORD MUST BE AT AN EVEN MEMORYADDRESS
  529. ; ADDRESSOFFSET OF BYTE(S) TO BE CHANGED, IF BIT $17 IS CLEAR -> ONLY THE 
  530.                         ;FOLLOWING BYTE IS TO MODIFY
  531.                         ;AT THIS OFFSET
  532. ;                OTHERWISE THE LENGTH OF A STRING FOLLOWS,
  533.                         ;THEN THE STRING ITSELF
  534. ;                      IF BIT $16 IS SET -> END OF MODIFYING
  535.                         ;MEANS A VALUE OF $XX400000
  536. ;                  COMBINATION OF BITS $16 AND $17 IS UNUSED
  537. ;                      BIT $15 IS RESERVED FOR FUTURE
  538. ; AT THE ADRESSOFFSET YOU MUST MASK OUT THE BITS $15-$1F (AND.L #$1FFFFF)
  539. ; THE NEXT BYTE IS THE BYTE TO BE MODIFIED 
  540. ; OR THE NEXT BYTES ARE THE LENGTH OF A STRING + THE STRING ITSELF 
  541. ; + $00 IF THE STRING HAS AN ODD LENGTH
  542. ; THE MAXIMUM LENGTH OF A FILE IS SO $1FFFFF, I THINK THIS SHOULD BE ENOUGH
  543.  
  544.  
  545. ;EXAMPLE
  546.  
  547. ;COMPTAB
  548. ;    DC.B   $00,$00,$10,$00 ;MEANS OFFSET $1000 TO FILEBEGIN, 1 BYTE FOLLOWS
  549. ;    DC.B   $FC,$80,$FD,$32 ;THE BYTE TO CHANGE AT THE OFFSET $1000 IS $FC
  550. ;                   ;THE NEXT OFFSET IS $FD32, A STRING FOLLOWS
  551. ;    DC.B   $05,$31,$32,$33,$34,$35 ;LENGTH OF STRING IS $5
  552. ;                              ;THE STRING IS $31,$32,$33,$34,$35
  553. ;    DC.B   $00,$01,$12,$34 ;UNUSED BYTE DUE TO ODD STRINGLENGTH
  554. ;                   ;THE NEXT OFFSET IS $11234
  555. ;    DC.B   $45,$40,$00,$00 ;THE BYTE TO CHANGE AT THE OFFSET $11234 IS $45
  556. ;                   ;ONLY BIT $16 IS SET -> COMPARE ENDS
  557.  
  558. ************************************************************************
  559.  
  560. WRITTEN    DC.B    'Compares files and makes a table of differences.',$A
  561.     DC.B    'Written by Egon.',$A,$A
  562. WRITTENEND    DC.B    0
  563.     EVEN
  564.  
  565. HELPSYNTAX    
  566.     DC.B    'Syntax: MAKECOMPTAB Originalfile Patchedfile {Tablefile}',$A
  567.     DC.B    'If Tablefile is not specified, the comparationtable gained will',$A
  568.     DC.B    'not be saved. You may set the parameters in double quotation marks.',$A
  569.     DC.B    'MAKECOMPTAB belongs to THE PATCHER by Egon.',$A,0
  570.     EVEN
  571.  
  572. LOCK1NAM    DS.B    $200
  573.     EVEN
  574.  
  575. LOCK2NAM    DS.B    $200
  576.     EVEN
  577.  
  578. LOCK3NAM    DS.B    $200
  579.     EVEN
  580.  
  581. OKDISP    DC.B    'Everything went ok. There were found $'
  582. NROK    DC.B    '0000 differences.',$A,0
  583.     EVEN
  584.  
  585. NOTSAVEDISP    DC.B    'There were too many differences ($'
  586. NRBIG    DC.B    '00000000) between the files.',$A
  587.     DC.B    'Comparationtable not saved.',$A,0
  588.     EVEN
  589.  
  590. NODIFFDISP    DC.B    'No differences detected.',$A,0
  591.     EVEN
  592.  
  593. ERRSAVEDISP    DC.B    'Error while saving comparationtable.',$A,0
  594.     EVEN
  595.  
  596. NOTEXISTDISP    DC.B    'Error - file does not exist.',$A,0
  597.     EVEN
  598.  
  599. NOFILEDISP    DC.B    'Error - parameter is not a file.',$A,0
  600.     EVEN
  601.  
  602. OTHERLENDISP    DC.B    'Error - the files to compare must have the same'
  603.     DC.B    ' length.',$A,0
  604.     EVEN
  605.  
  606. NOTENMEMDISP    DC.B    'Error - Out of memory.',$A,0
  607.     EVEN
  608.  
  609. ERROPENDISP    DC.B    'Error while opening file.',$A,0
  610.     EVEN
  611.  
  612. ERRLOADDISP    DC.B    'Error while loading.',$A,0
  613.     EVEN
  614.  
  615. ERRLONGDISP    DC.B    'Error - files to compare must not exceed 2 MB.',$A,0
  616.  
  617.  
  618. DOSBAS    DC.L    0
  619. OUTPUTBAS    DC.L    0
  620.  
  621. FILHANDLE    DC.L    0
  622. OSSTACK        DC.L    0
  623. INTUINAME    DC.B    "intuition.library",0
  624.     EVEN
  625. GRANAME    DC.B    "graphics.library",0
  626.     EVEN
  627. DOSNAM    DC.B    'dos.library',0
  628.     EVEN
  629. DATABASE    DC.L    0
  630. DATALENGTH    DC.L    0
  631. PARAM1LOCK    DC.L    0
  632. PARAM2LOCK    DC.L    0
  633. MEM1BASE    DC.L    0
  634. MEM2BASE    DC.L    0
  635. LENGTH    DC.L    0
  636. NUMBER    DC.L    0
  637. NOTSAVE    DC.B    0
  638.     EVEN
  639.  
  640. ;--------------------------------------------------------------------------
  641.  
  642.     SECTION    PRG2,BSS
  643. PARAM1INFO    DS.B    $104
  644. PARAM2INFO    DS.B    $104
  645. COMPTAB    DS.L    SIZETABLE
  646. COMPTABEND
  647.     DS.L    $40        ;IMPORTANT SPACE
  648.  
  649.